/*
 * nume: server-client-net.h
 * autor: ~D
 * descriere: modulul de comunicare al serverului
 * tabela de modificarei
 *   24 mai 2007 - ~D - prima versiune
 *   26 mai 2007 - ~D - adaugat noi metode
 *   31 mai 2007 - Alexandru
 *      - corectii
 *   21 iunie 2007 - ~D
 *  - clasa ServerNet portata pentru QT
 *  - schimbat structura clasa
 *  - schimbat scopul clasei - aceasta clasa se va ocupa de
 *    comunicarea dintre client si server, deci va exista o
 *    instanta in client si o instanta in server
 *  - schimbat nume clasa din ServerNet in ServerClientNet
 */

#ifndef SERVERNET_H__
#define SERVERNET_H__

#include <iostream>

#include <QtNetwork>
#include "message.h"
#include "log.h"

class ServerClientNet : public QObject {

    Q_OBJECT

public:
    // initializeaza socket-ul de trimitere
    ServerClientNet();

    // dezaloca cele 2 socket-uri
    ~ServerClientNet();

    // trimite un mesaj
    void send_message(quint32 address, quint16 port, Message* message);

    // primeste un mesaj
    void recv_message(Message** message, quint32* address);

    // creaza un socket UDP care face bind pe portul port
    void create_recv_socket(quint16 port);

    // asteapta sa fie datagame de citit
    bool wait_for_ready_read();
    // daca a fost creat socket_receiver_
    bool listening();
signals:
    // semnal emis cand pe socket_receiver_ vine o datagrama
    void message_received();

private:
    QUdpSocket *socket_sender_;         // socket-ul pe care se trimit datagrame
    QUdpSocket *socket_receiver_;       // socket-ul pe care se primesc datagrame
    
};

#endif  // SERVERNET_H__
